package com.jzo2o.trade.config;

import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.core.notification.NotificationConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

/**
 * @Description 微信支付V3配置类，用于初始化微信支付所需的核心配置和通知配置
 * @Author bo.li
 * @Date 2024/9/3 8:34
 * @Version 1.0
 */
@Configuration
public class WxPayConfig {

    @Resource
    private WxPayProperties wxPayProperties;

    /**
     * 微信支付V3版本核心配置,用于发起微信支付请求
     * @return 微信支付V3版本核心配置
     */
    @Bean
    public Config config(){
        Config config = new RSAAutoCertificateConfig.Builder()
                .merchantId(wxPayProperties.getMerchantId())                           // 商户ID
                .privateKey(wxPayProperties.getPrivateKey())                            // 商户私钥，从配置文件读取
                .merchantSerialNumber(wxPayProperties.getMerchantSerialNumber())  // 商户证书序列号
                .apiV3Key(wxPayProperties.getApiV3Key())     // APIv3密钥
                .build();
        return config;
    }

    /**
     * 微信支付V3版本通知配置,用于处理微信支付成功后的回调通知
     * @return 微信支付V3版本通知配置
     */
    @Bean
    public NotificationConfig notificationConfig(){
        NotificationConfig config = new RSAAutoCertificateConfig.Builder()
                .merchantId(wxPayProperties.getMerchantId())                           // 商户ID
                .privateKey(wxPayProperties.getPrivateKey())                            // 商户私钥，从配置文件读取
                .merchantSerialNumber(wxPayProperties.getMerchantSerialNumber())  // 商户证书序列号
                .apiV3Key(wxPayProperties.getApiV3Key())     // APIv3密钥
                .build();
        return config;
    }
}
